#!/bin/sh
	#	Changelog:
	#	2.1	
	#	 -	Korrektur der FPS-Berechnung (z.B: 29.97 bei englischen Sendern)	
	#	2.0 (entspricht weitgehend Version 1.5)
	#	 -	kleinere Korrekturen
	#	1.5 (RC)
	#	 -	eigene Version von ffmpeg/ffprobe für x86 und ARM (mediainfo entfernt)
	#	 -	verbesserte AAC-Encodererkennung für Konvertierung (Sortierung nach Qualität)
	#	1.4
	#	 -	OTRdecoder funktionierte nicht auf DS214play und DS415play
	#	1.3
	#	 -	ARM-Version von mp4box und Transcode integriert (Autocut und MP4-Konvertierung mit ARM-CPU's jetzt möglich)
	#	1.2
	#	 - 	weitere Umbenennungsparameter (fps, Realdauer, Seitenverhältnis, Bildhöhe, Bildbreite, Scantype [i oder p], Audiocodec, Videocodec)
	#	 - 	weitere Anpassung an der Sqlite-DB (Stringkorrektur ect.)
	#	 - 	kleinere Korrekturen bei der Separierung der Umbenennungsfragmente
	#	 - 	Korrektur für Ordner mit Leerzeichen
	#	 - 	Support für ARMv7-CPU (DS215j, ect.)
	#	1.1
	#	 - 	Metadaten werden nun in die MP4-Dateien geschrieben (nur bei aktiviertem Autorename)
	#	 - 	Routine zur Erstellung der sqlite3-DB geändert 
	#	 - 	Errorhandling für OTR korrigiert
	#	 - 	Anpassung für 64Bit Systeme (ab DSM 6.0) / Ergänzung einer internen 32bit Library für avisplit
	#	 - 	Fehler bei der datenbankbasierten Umbenennung meherer Dateien gleichzeitig
	#	1.0
	#	 - 	Schalter für LOG's in Konfiguration.txt hinzugefügt inkl. neuem Startskript / Im Aufgabenplaner nur noch den Pfad zum Startskript eintragen (z.B. "/volume1/homes/admin/script/synOTR/synOTR-start.sh")	
	#	 - 	Logging überarbeitet (Level hinzugefügt) / übersichtlicher gestaltet
	#	 - 	bash erneuert (shellshock-sicherheitslücke behoben)
	#	 - 	sofortige Umbenennung auch bei fehlenden Serien / wird bei Verfügbargeit nachgeholt (datenbankbasiert via SQLite-Datenbank)
	#	0.7
	#	 - 	Errorlogging korrigiert
	#	 - 	Updateabfrage aktualisiert
	#	0.6	
	#	 - 	Fehler bei Modellen mit evensport-CPU behoben
	#	0.5:
	#	 -  Benachrichtigung für fertige Aufgaben in DSM-Benachrichtigung
	#	 - 	Benachrichtigung für fertige Aufgaben per kurzen Piep
	#	 - 	Das Dateidatum wird auf das Ausstrahlungsdatum gesetzt, sofern Rename aktiv ist (bessere Sortiermöglichkeiten)
	#	 - 	Serieninformationen werden von www.otr-serien.de importiert und die Dateien entsprechend umbenannt
	#	0.4:
	#	 - 	Rename: Korrektur bei Sendernamen
	#	 - 	Cutlisten werden jetzt nach Dateigröße und wenn nicht vorhanden, dann zusätzlich auch nach Dateinamen gesucht
	#	 - 	Updateabfrage (DSM-Benachrichtigung funktioniert nur, wenn das Script als Benutzer "root" aufgerufen wird)
	# ---------------------------------------------------------------------
	#	ARM-Binarys:	http://mirrordirector.raspbian.org/raspbian/pool/main/
	#	Transcode:		https://bitbucket.org/france/transcode-tcforge/downloads
	#	ffprobe:		http://stackoverflow.com/questions/684015/how-can-i-get-the-resolution-width-and-height-for-a-video-file-from-a-linux-co
	#	Build ff4ARM	http://forum.minimserver.com/showthread.php?tid=3139&pid=21149
	#	ffmpeg fdk		https://sourceforge.net/projects/ffmpeg-hi/?source=typ_redirect
						#   awk: https://www-user.tu-chemnitz.de/~hot/unix_linux_werkzeugkasten/awk.html
							#	$1  --> Feld 1 des aktuellen Satzes (analog $2, $3, ... für die weiteren Felder)
							#	$NF --> letztes Feld des aktuellen Satzes
							#	NF  --> Anzahl der Felder des aktuellen Satzes (number of fields)
							#	$0  --> der komplette Satz


#######################################################################	
CLIENTVERSION="2.1" #  [2016-08-28]
DevChannel="Release"

# ---------------------------------------------------------------------
# 			GRUNDKONFIGRUATIONEN / INDIVIDUELLE ANPASSUNGEN			  |
# ---------------------------------------------------------------------

# Arbeitsverzeichnis auslesen und hineinwechseln:
# ---------------------------------------------------------------------
	workdir=$(cd $(dirname $0);pwd)
	cd ${workdir}

# Konfigurationsdatei einbinden:
# ---------------------------------------------------------------------
	CONFIG=Konfiguration.txt
	. ./$CONFIG

# Variable "lastjob" für Benachrichtigung setzen:
# ---------------------------------------------------------------------
if [ $OTRrenameactiv = "on" ] ; then
		lastjob=4
	elif [ $OTRavi2mp4active = "on" ] ; then
		lastjob=3
	elif [ $OTRcutactiv = "on" ] ; then
		lastjob=2
	else
		lastjob=1
fi

# Aufgabenindex:
# ---------------------------------------------------------------------
if [ $decoderactiv = "on" ] ; then
		idx1=1
	else
		idx1=0
fi
if [ $OTRcutactiv = "on" ] ; then
		idx2=1
	else
		idx2=0
fi
if [ $OTRavi2mp4active = "on" ] ; then
		idx3=1
	else
		idx3=0
fi
if [ $OTRrenameactiv = "on" ] ; then
		idx4=1
	else
		idx4=0
fi
idx=${idx1}${idx2}${idx3}${idx4}

# an welchen User/Gruppe soll die DSM-Benachrichtigung gesendet werden:
# ---------------------------------------------------------------------
	synOTR_user=`whoami`; echo "synOTR-User:	$synOTR_user"
	#MessageTo="$synOTR_user"	# User, welche synOTR aufgerufen hat (funktioniert natürlich nicht bei root, da root kein DSM-GUI-LogIn hat und die Message ins leere läuft)
	#MessageTo="users"			# alle
	MessageTo="administrators"	# Administratoren (Standardeinstellung)

# Systeminformation / LIBRARY_PATH anpassen / PATH anpassen:
# ---------------------------------------------------------------------
	machinetyp=`uname --machine`; echo "Architektur:	$machinetyp"
	dsmbuild=`uname -v | awk '{print $1}' | sed "s/#//g"`; echo "DSM-Build:	$dsmbuild"
	read MAC </sys/class/net/eth0/address
	sysID=`echo $MAC | cksum | awk '{print $1}'`; sysID="$(printf '%010d' $sysID)" #echo "Prüfsumme der MAC-Adresse als Hardware-ID: $sysID" 10-stellig
	device=`uname -a | awk -F_ '{print $NF}' | sed "s/+/plus/g" `; echo "Gerät: 		$device"
	# nachstehende Zeile auskommentieren, sofern keine anonyme Systeminfo an den Entwickler gesendet werden soll (Installationstrigger beinhaltet folgende anonymen Geräteinfos: DSM-Build / Prüfsumme der MAC-Adresse als Hardware-ID [anonyme Zahlenfolge um Installationen zu zählen] / Architektur / Geräte-Typ) 
	curl -i -X POST -d '{"requests":["?idsite=11&url=http://geimist.eu/synOTR/installwatch.php&dimension1='${machinetyp}'&dimension2='${dsmbuild}'&dimension3='${sysID}_${device}'&dimension4='${device}'&rec=1&uid='${sysID}_${device}'&action_name=synOTR Shell-run/'${sysID}_${device}_${dsmbuild}_${machinetyp}_idx${idx}_synOTR${CLIENTVERSION}-${DevChannel}'&ua=curl/7.9.8 (i686-pc-linux-gnu)&new_visit=1"]}' http://geimist.eu/piwik/piwik.php &>/dev/null # &ua=curl/7.9.8 (i686-pc-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.6b) (ipv6 enabled)	#  http://developer.piwik.org/api-reference/tracking-api	# curl an dieser Stelle, da nach Einbindung der Librarys auf ARM eine Inkompatibilität vorhanden ist. ==> Alternative: Library-Path sichern und an späterer Stelle temporär rückspielen

	if [ $machinetyp = "x86_64" ] && [ $dsmbuild -gt 7134 ]; then # DSM-Build 7135 = DSM 6.0 BETA 1
		echo "		System arbeitet mit DSM 6.0 oder höher. Der LD_LIBRARY_PATH wird angepasst."
		export LD_LIBRARY_PATH=${workdir}/app/lib:$LD_LIBRARY_PATH
		PATH=$PATH:${workdir}/app/bin #:${workdir}/app
		bsy="${workdir}/app/bin/busybox"
		ffmpeg="${workdir}/app/bin/ffmpeg"
	elif [ `echo $machinetyp | grep "armv" ` ] ; then
	# elif [ $machinetyp = "armv7l" ] ; then
		export LD_LIBRARY_PATH=${workdir}/app/libARMv7l:$LD_LIBRARY_PATH
		PATH=$PATH:${workdir}/app/binARMv7l:/opt/bin #:${workdir}/app
		bsy="${workdir}/app/binARMv7l/busybox"
		ffmpeg="${workdir}/app/binARMv7l/ffmpeg"
	elif [ $machinetyp = "i686" ] ; then
		echo "		System arbeitet mit DSM 6.0 oder höher. Der LD_LIBRARY_PATH wird angepasst."
		export LD_LIBRARY_PATH=${workdir}/app/lib:$LD_LIBRARY_PATH
		PATH=$PATH:${workdir}/app/bin #:${workdir}/app
		bsy="${workdir}/app/bin/busybox"
		ffmpeg="${workdir}/app/bin/ffmpeg"
	elif [ $machinetyp = "x86_64" ] ; then
		PATH=$PATH:${workdir}/app/bin #:${workdir}/app
		bsy="${workdir}/app/bin/busybox"
		ffmpeg="${workdir}/app/bin/ffmpeg"
	else
		echo "Deine CPU-Plattform [${machinetyp}] wird leider nicht unterstützt oder ist nicht bekannt …"
		exit
	fi
	
	avisplitpath=`which avisplit`
	if [ ! -f "$avisplitpath" ] ; then
		echo -e ; echo "avisplit wurde nicht gefunden - Schneiden wird übersprungen!"; echo "Installiere Transcode via iPKG/oPKG"; echo -e
		OTRcutactiv="off"
	fi

# spezielle Programmpfade anpassen :
# ---------------------------------------------------------------------
# (oder andere gewünschte Version / nichtbenötigte ggfs. auskommentieren)
	#	ffmpeg="${workdir}/app/bin/ffmpeg_fdk/ffmpeg"	
	#	ffmpeg="${workdir}/app/bin/ffmpeg"
	#	ffmpeg=`which ffmpeg`	# erstes ffmpeg in PATH
	echo "ffmpeg-Version:	$ffmpeg"
	#synodsmnotify=`which synodsmnotify`
	OLDIFS=$IFS	# ursprünglichen Fieldseparator sichern

# Konfiguration für LogLevel:
# ---------------------------------------------------------------------
# LOGlevel:		0 => Logging inaktiv / 1 => normal / 2 => erweitert
	if [ $LOGlevel = "1" ] ; then
		echo "Loglevel: 	normal"
		ffloglevel="warning"		# ffmpeg LogLevel (https://ffmpeg.org/ffmpeg.html)
		m4bloglevel="-quiet"
		CUTloglevel="-w"
	elif [ $LOGlevel = "2" ] ; then
		echo "Loglevel: 	erweitert"
		ffloglevel="info"
		m4bloglevel=""
		CUTloglevel="-v"
	else
		ffloglevel="quiet"
		m4bloglevel="-quiet"
		CUTloglevel="-w"
	fi

# Abweichung der Dateiänderungszeit in Minuten um laufende FTP-Pushaufträge nicht zu decodieren:
# ---------------------------------------------------------------------
	timediff="1"	
	today=`date +%d`

# Verzeichnisse prüfen bzw. anlegen:
# ---------------------------------------------------------------------
	echo "Arbeitsverzeichnist ist: ${workdir}"
	OTRkeydeldir="${OTRkeydeldir%/}/"
	if [ -d "$OTRkeydeldir" ]; then
		echo "Löschverzeichnis vorhanden [$OTRkeydeldir]"
	else
		mkdir "$OTRkeydeldir"		
		echo "Löschverzeichnis wurde erstellt [$OTRkeydeldir]"
	fi
	
	destdir="${destdir%/}/"
	decodir="${destdir%/}/_decodiert"
	if [ ! -d "$destdir" ]; then
		echo "! ! ! Zielverzeichnis [$destdir] nicht vorhanden. Konfiguration.txt prüfen ! ! !"
		exit
	fi
	if [ $OTRcutactiv = "off" ] ; then
		decodir="$destdir"
		echo "Decodierverzeichnis ist: [$decodir]"
	else
		if [ -d "$decodir" ]; then
			echo "Decodierverzeichnis vorhanden [$decodir]"
		else
			mkdir "${destdir%/}/_decodiert"	
			echo "Decodierverzeichnis wurde erstellt [$decodir]"	
		fi
	fi


#################################################################################################
#		 _______________________________________________________________________________		#
#		|																				|		#
#		|                           BEGINN DER FUNKTIONEN                        		|		#
#		|_______________________________________________________________________________|		#
#																								#
#################################################################################################


OTRdecoder ()
{
IFS=$'\012'	 # entspricht einem $'\n' Newline
if [ $decoderactiv = "on" ] ; then
	echo -e ; echo -e ; echo "==> decodieren:"
	OTRkeydir="${OTRkeydir%/}/"
	for i in $(find "${OTRkeydir}" -maxdepth 1 -name "*.otrkey" -mmin +"$timediff" -type f)
		do	
			echo -e
			filename=`basename "$i"`
			decofilename=${filename%.*}
			echo "	$filename"	

			if [ $machinetyp = "x86_64" ]; then
				otrdecoderLOG=$(otrdecoder -q -i "$i" -o "$decodir" -e "$OTRuser" -p "$OTRpw" 2>&1)
			elif [ $machinetyp = "i686" ]; then
				otrdecoderLOG=$(otrdecoder -q -i "$i" -o "$decodir" -e "$OTRuser" -p "$OTRpw" 2>&1)
			elif [ `echo $machinetyp | grep "armv" ` ] ; then
				otrdecoderLOG=$(otrdecoder -d "$i" -O "${decodir}/${decofilename}" -e "$OTRuser" -p "$OTRpw"  2>&1)
			fi

			if [ $LOGlevel = "2" ] ; then
				echo "OTRdecoder LOG: $otrdecoderLOG"
			fi
			if echo $otrdecoderLOG | grep -q "No connection to server" ; then 
				echo "! ! ! OTRDecoder konnte keine Verbindung zum OTR-Server aufbauen. Datei wird übersprungen." # behält Quellvideo
				echo -e; echo "OTRdecoder LOG: $otrdecoderLOG"
				continue ; 
			else 
				if [ -f "${decodir}/${filename%.*}" ]; then 	# nur löschen, wenn erfolgreich decodiert:
					mv "$i" "$OTRkeydeldir"	
					echo "	L==> fertig"
				else
					echo "	L==> decodieren fehlgeschlagen [Datei im Zielverzeichnis nicht gefunden …]"; echo "		OTRdecoder LOG: $otrdecoderLOG"
					continue
				fi
				
#				IFS=$OLDIFS
				if [ $lastjob -eq 1 ] ; then
					if [ $dsmtextnotify = "on" ] ; then
						sleep 5
						synodsmnotify @$MessageTo "synOTR" "$filename ist fertig"
						sleep 5
					fi
					if [ $dsmbeepnotify = "on" ] ; then
						sleep 5
						echo 2 > /dev/ttyS1 #short beep
						sleep 5
					fi
					wget -q -O - "http://geimist.eu/synOTR/synOTR_FILECOUNT" >/dev/null 2>&1
				fi	
			fi
		done
elif [ $decoderactiv = "off" ] ; then
	echo -e ; echo -e ; echo "==> decodieren ist deaktiviert"
else
	echo "==> Variable für Decodieraktivität falsch gesetzt ==> Wert >decoderactiv< in Konfiguration.txt überprüfen!"
fi
IFS=$OLDIFS
}
	
	
OTRcut ()
{
IFS=$'\012'
if [ $OTRcutactiv = "on" ] ; then
	echo -e ; echo -e; echo "==> schneiden:"		
	for i in $(find "$decodir" -maxdepth 1 -name "*.avi" -o -name "*.mp4" -type f)
		do
			filename=`basename "$i"`
			echo -e 
			echo "	SCHNEIDE: ==> $filename" ; echo -e
			if echo "$filename" | grep -q ".mp4"; then		
				echo "$filename [.mp4-Datei] kann mit avisplit / avimerge nicht geschnitten werden"
				mv $i "$destdir"
				continue		# nächste Datei
			fi
 			bash ${workdir}/app/OTRcut.sh --force-smart -a -e $CUTloglevel --delete --toprated -i "$i" -o "$destdir" --deldir "$OTRkeydeldir" --wd ${workdir}/$CONFIG --messto "$MessageTo" #--lj $lastjob
		done
elif [ $OTRcutactiv = "off" ] ; then
	echo -e ; echo -e ; echo "==> schneiden ist deaktiviert"
else
	echo "==> Variable für Cutaktivität falsch gesetzt ==> Wert >OTRcutactiv< in Konfiguration.txt überprüfen!"
fi
IFS=$OLDIFS
}
	
	
OTRavi2mp4 ()
{
cd "$destdir"
if [ $OTRavi2mp4active = "on" ] ; then
	echo -e ; echo -e; echo "==> in MP4 konvertieren:"
	IFS=$'\012'
	for i in $(find "$destdir" -maxdepth 1 -name "*.avi" -type f)
		do
			IFS=$OLDIFS
			echo -e
			title=`basename "$i"`
			pfad=`dirname "$i"`
			pfad="$pfad/"
			title=${title%.*}
			echo -e 
			echo "	KONVERTIERE: ==> $title" ; echo -e		
			
			fileinfo=$($ffmpeg -i "$i" 2>&1)	
			ffprobeInfo=$(ffprobe -v quiet -print_format json -show_format -show_streams "$i" 2>&1)

			#	------- AUDIOCODEC:				
			audiocodec=`echo "$ffprobeInfo" | jq '.streams[1].codec_name' | sed "s/\"//g" `
			audiofile="$destdir$title.$audiocodec"
			echo "Audiocodec:	$audiocodec"
			if [ $audiocodec = "aac" ] ; then
				echo "Konvertierung nicht nötig ==> springe zu nächster Datei:"
				continue
			fi

			#	------- VIDEOCODEC:	
			videocodec=`echo "$fileinfo" | grep "Video:" | $bsy awk '{print $4}'` 
			if [ $videocodec = "mpeg4" ] ; then
					videocodec="divx"
					vExt="tmp.m4v"; 
				elif [ $videocodec = "h264" ]; then
					videocodec="h264"
					vExt="h264"
				else 
					videocodec="unknown"
					echo "Videoformat nicht erkannt. ==> springe zu nächster Datei:"
					continue ; 
			fi
			echo "Videocodec:		$videocodec"
			videofile="$destdir$title.$vExt"
			
			#	------- FRAMERATE:																
			fps=`echo "$ffprobeInfo" | jq '.streams[0].r_frame_rate' | sed "s/\"//g" | bc -l | awk '{printf "%.2f\n", $1}' ` # | awk -F '/' '{print $1}' `
			echo "Framerate ist:	$fps"

#	-------DEMUX:		
			#	------- Audio extrahieren / konvertieren:
			$ffmpeg -loglevel $ffloglevel -i "$i" -acodec copy -vn "$audiofile"

			if [ $audiocodec != "aac" ] ; then
				#----------------------------------------------------------------------------------------
				#		HIER SIND INDIVIDUELLE PARAMETER FÜR VERSCHIEDENE AAC-Encoder ANZUPASSEN	 	|
				#		- libfdk_aac hat die beste Qualität, ist aber nicht in DSM enthalten			|
				#		- Native AAC encoder hat die 2.beste Qualität, ist aber nicht in DSM enthalten	|
				#		- libfaac ist in DSM-ffmpeg enthalten, hat aber die schlechteste Qualität		|
				#----------------------------------------------------------------------------------------
				encoders=`$ffmpeg -loglevel $ffloglevel -encoders`		# Auflistung der installierten ffmpeg-Encoder
				if $(echo "$encoders" | grep -q libfdk_aac ); then		# für libfdk_aac
					echo "	Erkannter ffmpeg-Audioencoder:	fdk-aac [1.Wahl]"
					$ffmpeg -threads 2 -loglevel $ffloglevel -i "$audiofile" -c:a libfdk_aac -b:a "${OTRaacqal%k}k" "$audiofile.m4a"
				elif $(echo "$encoders" | grep -q "AAC (Advanced Audio Coding)" ) ; then		# Native FFmpeg AAC encoder
					echo "	Erkannter ffmpeg-Audioencoder:	nativ (ffmpeg > 3.0) [2.Wahl]"
					$ffmpeg -loglevel $ffloglevel -threads 2 -i "$audiofile" -c:a aac -b:a "${OTRaacqal%k}k" "$audiofile.m4a"
				elif $(echo "$encoders" | grep -q libfaac ) ; then 		# libfaac > syno-ffmpeg
					echo "	Erkannter ffmpeg-Audioencoder:	libfaac [3.Wahl]"
					if [ 128 -gt ${OTRaacqal%k}  ]; then
						echo "	Die aac-Zielbitrate ist mit ${OTRaacqal%k}k für den libfaac-Encoder sehr gering. Erhöhe den Wert >OTRaacqal< in der Konfiguration.txt für eine bessere Qualität."
					fi
					$ffmpeg -loglevel $ffloglevel -threads 2 -i "$audiofile" -acodec libfaac -ab "${OTRaacqal%k}k" "$audiofile.m4a"
				else
					echo "	finde keinen ffmpeg-Audioencoder!"; echo "	Gebe den Pfad zu einer aac-kompatiblen ffmpeg-Version an."
				fi
				rm "$audiofile"	
				audiofile="$audiofile.m4a"
			fi

			#	------- Video extrahieren:
			$ffmpeg -loglevel $ffloglevel -i "$i" -an -vcodec copy "$videofile"

#	-------REMUX:
			echo "L==> mp4box Remux:"
			echo audiofile ist:	"$audiofile"
			echo videofile ist:	"$videofile"
			
			mp4box $m4bloglevel -add "$videofile" -add "$audiofile" -fps $fps -tmp "$pfad" "$pfad$title.mp4"

			#	------- Temp löschen:
			rm "$videofile"
			rm "$audiofile"

			#	------- Original löschen:
			mv "$i" "$OTRkeydeldir"
			
			if [ $lastjob -eq 3 ] ; then
				if [ $dsmtextnotify = "on" ] ; then
					sleep 5
					synodsmnotify @$MessageTo "synOTR" "[$title] ist fertig"
					sleep 5
				fi
				if [ $dsmbeepnotify = "on" ] ; then
					sleep 5
				    echo 2 > /dev/ttyS1 #short beep
					sleep 5
				fi
				wget -q -O - "http://geimist.eu/synOTR/synOTR_FILECOUNT" >/dev/null 2>&1
			fi
		done	
	elif [ $OTRavi2mp4active = "off" ] ; then
		echo -e ; echo -e ; echo "==> in MP4 konvertieren ist deaktiviert"
	else
		echo "==> Variable für OTRavi2mp4active falsch gesetzt ==> Wert >OTRavi2mp4active< in Konfiguration.txt überprüfen!"
fi
IFS=$OLDIFS
}
	

OTRrename ()
{
IFS=$'\012'
echo -e ; echo -e; echo "==> OTRrename [Umbenennungssyntax: $NameSyntax]:"
createDB
for i in $(find "$destdir" -maxdepth 1 -name "*TVOON*avi" -o -name "*TVOON*mp4" -type f)
	do
		IFS=$OLDIFS	
		sourcename=`basename "$i"`
		filename=`basename "$i"`
		echo -e ; echo "	RENAME: ==> $filename:" 
		fileextension="${filename##*.}"
		#	------------------ technische Filmdaten via ffmpeg und ffprobe auslesen:
		fileinfo=$(ffmpeg -i "$i" 2>&1)
		ffprobeInfo=$(ffprobe -v quiet -print_format json -show_format -show_streams "$i" 2>&1)
		
		if [ $LOGlevel = "2" ] ; then
			echo "Dateiinformation von ffmpeg ausgelesen:		$fileinfo"; echo -e
			echo "Dateiinformation von ffprobe ausgelesen:		"; echo "$ffprobeInfo"; echo -e
		fi
		
		# unerwünschte Zeichen korrigieren (u.a. durch OTRcut):
		# Die_Sendung_14.11.21_22-40_orf3_30_TVOON_DE.HQ-cut.avi
		# Die_Sendung_14.12.03_22-00_ndr_30_TVOON_DE.mpg.HD.avi-cut.avi
		filename=`echo $filename | sed 's/HQ-cut/mpg.HQ/g'`	
		filename=`echo $filename | sed 's/HD-cut/mpg.HD/g'`	
		# filename=`echo $filename | sed 's/.avi-cut//g'`	
		filename=`echo $filename | sed 's/mpg.HD.avi-cut/mpg.HD/g'`	
		# filename=`echo $filename | sed 's/mpg.HD.avi-cut./mpg.HD./g'`	
		filename=`echo $filename | sed 's/DE-cut/DE.mpg/g'`	
		#filename=`echo $filename | sed 's///g'`	# mp4 fehlt noch

		echo "	==> nach Korrektur:	$filename"; echo -e 
		echo "Fileextension ist:	$fileextension"	
		#	------------------ FORMAT:
		if echo "$filename" | grep -q ".HQ."; then							
			film_ohne_ende=${filename%%_TVOON_DE.mpg.HQ.*}
			format=HQ
		elif echo "$filename" | grep -q ".HD"; then					
			film_ohne_ende=${filename%%_TVOON_DE.mpg.HD.*}
			format=HD
		elif echo "$filename" | grep -q ".mpg.mp4"; then		
			film_ohne_ende=${filename%%_TVOON_DE.mpg.mp4}		
			format=LQ
		else
			film_ohne_ende=${filename%%_TVOON_DE.mpg.*}
			format=SD
		fi
		echo "Format ist:			$format"
		#	------------------ Referenzpunkt suchen:
		ersterpunkt=`echo $filename | awk '{print index($filename, ".")}'`
		#	------------------ Titel:
		titleend=$(($ersterpunkt-4))
		title=`echo $filename | cut -c -$titleend `			
		title=`echo $title | sed 's/__/ - /g'`			
		title=`echo $title | sed 's/_/ /g'`			
		echo "Titel ist:			$title"							
		#	------------------ Jahr:
		YY=$(echo "$filename" | awk -F '.' '{print $1}' | awk -F '_' '{print $NF}')
		echo "YY ist:				$YY"
		YYYY="20$YY"
		echo "YYYY ist:			$YYYY"
		#	------------------ Monat:
		Mo=$(echo "$filename" | awk -F '.' '{print $2}')
		echo "Monat ist:			$Mo"
		#	------------------ Tag:
		DD=$(echo "$filename" | awk -F '.' '{print $3}' | awk -F '_' '{print $1}')
		echo "Tag ist:			$DD"
		#	------------------ Stunde:
		HH=$(echo "$filename" | awk -F '.' '{print $3}' | awk -F '_' '{print $2}' | awk -F '-' '{print $1}')
		echo "Stunde ist:			$HH"		
		#	------------------ Minute:
		Min=$(echo "$filename" | awk -F '.' '{print $3}' | awk -F '_' '{print $2}' | awk -F '-' '{print $2}')
		echo "Minute ist:			$Min"
		#	------------------ Dauer:
		duration=$(echo "$filename" | awk -F '.' '{print $3}' | awk -F '_' '{print $4}')
		echo "Dauer ist:			$duration"
		realduration=`echo "$ffprobeInfo" | jq '.streams[0].duration' | sed "s/\"//g" | awk -F '.' '{print $1}' `
		realduration=$(($realduration/60))
		echo "Realdauer ist:			$realduration"
		#	------------------ Sender:
		Channel=$(echo "$filename" | awk -F '.' '{print $3}' | awk -F '_' '{print $3}' | $bsy tr [:lower:] [:upper:])		# ? ! ? ! ?	systeminternes /usr/bin/tr verfälscht Zeichen vox => vpx
		echo "Sender ist:			$Channel"
		#	------------------ Bildwiederholrate:
		fps=`echo "$ffprobeInfo" | jq '.streams[0].r_frame_rate' | sed "s/\"//g" | bc -l | awk '{printf "%.2f\n", $1}' ` # | awk -F '/' '{print $1}' `
		echo "Framerate ist:			$fps"
		#	------------------ ScanType:
			# http://www.aktau.be/2013/09/22/detecting-interlaced-video-with-ffmpeg/
		#	scantype=$($ffmpeg -filter:v idet -frames:v 10 -an -f rawvideo -y /dev/null -i "$i" 2>&1)
		#	scantype=$(echo "$fileinfo2" | grep "Scan type" | awk -F: '{print $2}' )
			if [ $(echo "$scantype" | grep "Progressive") ] ; then
				scantype="p"
			elif [ $(echo "$scantype" | grep "not interlaced") ] ; then
				scantype="p"
			elif [ $(echo "$scantype" | grep "is interlaced") ] ; then
				scantype="i"
			fi
		scantype=""	# deaktiviert
		echo "Scantype:			${scantype}"
		#	------------------ Auflösung:
		height=`echo "$ffprobeInfo" | jq '.streams[0].height' `
		echo "Auflösung Höhe:			${height}"
		width=`echo "$ffprobeInfo" | jq '.streams[0].width' `
		echo "Auflösung Breite:		${width}"
		#	------------------ Seitenverhältnis:
		aspect_ratio=`echo "$ffprobeInfo" | jq '.streams[0].display_aspect_ratio' | sed "s/\"//g"  | sed "s/\:/-/g" `
		echo "Seitenverhältnis:		${aspect_ratio}"
		#	------------------ Audiocodec:
		a_codec=`echo "$ffprobeInfo" | jq '.streams[1].codec_name' | sed "s/\"//g" `
		echo "Audiocodec:			${a_codec}"
		#	------------------ Videocodec:
		v_codec=`echo "$ffprobeInfo" | jq '.streams[0].codec_name' | sed "s/\"//g" `
		echo "Videocodec:			${v_codec}"
		
		NewName=$NameSyntax		# Muster aus Konfiguration laden

		# Serieninformationen holen - VIELEN DANK AN Daniel Dieth VON www.otr-serien.de :
		if [ $OTRserieninfo = "on" ] ; then
			echo "Anfrage an otr-serien.de ==>"
#				echo "	http://www.otr-serien.de/myapi/reverseotrkeycheck.php?otrkey=$i&who=synOTR" ; echo -e
			echo "	http://www.otr-serien.de/myapi/reverseotrkeycheck.php?otrkey=$filename&who=synOTR" ; echo -e
			serieninfo=$(wget -q -O - "http://www.otr-serien.de/myapi/reverseotrkeycheck.php?otrkey=$filename&who=synOTR" )
			echo "Rückgabewert von otr-serien.de ==>"; echo "	$serieninfo" ; echo -e # Erfolglosmeldung Serieninfo: <!DOCTYPE html> Keine Serien zuordnung vorhanden	
			if echo "$serieninfo" | grep -q "Keine Serien zuordnung vorhanden"; then
				missSeries=1	# Trigger für fehlende Serieninformation in SQLite-DB
				NewName=`echo $NewName | sed "s/§tit/${title}/g"`
			elif echo "$serieninfo" | grep -q "Kein OTR DB Eintrag vorhanden"; then
				missSeries=1	# Trigger für fehlende Serieninformation in SQLite-DB
				echo "Film konnte von OTRserien nicht identifiziert werden (wahrscheinlich wurde der Film manuell umbenannt) --> Standardumbenennung wird verwendet"
				NewName=`echo $NewName | sed "s/§tit/${title}/g"`
			else
				missSeries=0	# Trigger für fehlende Serieninformation in SQLite-DB
				#	Zeichenkorrektur:
				serieninfo=`echo $serieninfo | sed "s/<!DOCTYPE html>//g" | sed 's/\\\u00e4/ä/g' | sed 's/\\\u00f6/ö/g' | sed 's/\\\u00c4/Ä/g' | sed 's/\\\u00d6/Ö/g' | sed 's/\\\u00fC/ü/g' | sed 's/\\\u00dC/Ü/g' | sed 's/\\\u00dF/ß/g' `
				OTRID=`echo "$serieninfo" | awk -F, '{print $1}' | awk -F: '{print $2}' | sed "s/\"//g"`
				echo "OTRID:				$OTRID"
				serietitle=`echo "$serieninfo" | jq -r '.Serie' | sed "s/://g" `		# jq ist ein Kommandozeilen-JSON-Parser
				echo "serietitle:			$serietitle"	
				season=`echo "$serieninfo" | awk -F, '{print $3}' | awk -F: '{print $2}' | sed "s/\"//g"`
				season="$(printf '%02d' "$season")"		# 2stellig mit führender Null
				echo "season:				$season"	
				episode=`echo "$serieninfo" | awk -F, '{print $4}' | awk -F: '{print $2}' | sed "s/\"//g"`
				episode="$(printf '%02d' "$episode")"	# 2stellig mit führender Null
				echo "episode:			$episode"	
				episodetitle=`echo "$serieninfo" | jq -r '.Folgenname' | sed "s/://g" `
				echo "episodetitle:		$episodetitle"	
				description=`echo "$serieninfo" | jq -r '.Folgenbeschreibung' | sed "s/:/ -/g" `
				echo "description:		$description"
				
				title="$serietitle - S${season}E${episode} $episodetitle"
				NewName=`echo $NewName | sed "s/§tit/${title}/g"`
			fi
		fi
		#	------------------ Neuer Name:
		NewName=`echo $NewName | sed "s/§dur/${duration}/g"`
		NewName=`echo $NewName | sed "s/§tit/${title}/g"`
		NewName=`echo $NewName | sed "s/§ylong/${YYYY}/g"`
		NewName=`echo $NewName | sed "s/§yshort/${YY}/g"`
		NewName=`echo $NewName | sed "s/§mon/${Mo}/g"`
		NewName=`echo $NewName | sed "s/§day/${DD}/g"`
		NewName=`echo $NewName | sed "s/§hou/${HH}/g"`
		NewName=`echo $NewName | sed "s/§min/${Min}/g"`
		NewName=`echo $NewName | sed "s/§cha/${Channel}/g"`
		NewName=`echo $NewName | sed "s/§qua/${format}/g"`
		NewName=`echo $NewName | sed "s/§fps/${fps}/g"`
		NewName=`echo $NewName | sed "s/§redur/${realduration}/g"`
		NewName=`echo $NewName | sed "s/§scty/${scantype}/g"`
		NewName=`echo $NewName | sed "s/§height/${height}/g"`
		NewName=`echo $NewName | sed "s/§width/${width}/g"`
		NewName=`echo $NewName | sed "s/§asra/${aspect_ratio}/g"`
		NewName=`echo $NewName | sed "s/§acod/${a_codec}/g"`
		NewName=`echo $NewName | sed "s/§vcod/${v_codec}/g"`
		
		NewName="$NewName.$fileextension"					
		echo -e; echo "Neuer Dateiname ist: $NewName" ; echo -e

		if [ $OTRrenameactiv = "on" ] ; then
			echo "==> umbenennen:"	
			if [ -f "${destdir}${NewName}" ]; then		# Prüfen, ob Zielname bereits vorhanden ist
				echo "Die Datei $NewName ist bereits vorhanden und $filename wird nicht umbenannt."
			else	
				mv -i "$i" "${destdir}${NewName}"
				# echo "$ffprobeInfo" >"${destdir}${title}.json"

				#	Tags schreiben (MP4 only):
				echo "	L==> Tags schreiben AtomicParsley (MP4 only):"
				if [ $fileextension = "mp4" ] ; then 
					#  --TVNetwork    (string)     Set the TV Network name
					#  --TVShowName   (string)     Set the TV Show name
					#  --TVEpisode    (string)     Set the TV episode/production code
					#  --TVSeasonNum  (number)     Set the TV Season number
					#  --TVEpisodeNum (number)     Set the TV Episode number
					#  --description 
					#  --artwork
					#  --genre 
					AtomicParsleyLOG=$(AtomicParsley "${destdir}${NewName}" --overWrite --TVNetwork "$Channel" --TVShowName "$serietitle" --TVEpisode "$episodetitle" --TVSeasonNum "$season" --TVEpisodeNum "$episode" --title "$title" 2>&1)	
					if [ $LOGlevel = "2" ] ; then
						echo "	AtomicParsleyLOG= $AtomicParsleyLOG"
					fi
					touch -t $YY$Mo$DD$HH$Min "${destdir}${NewName}" 			# Dateidatum auf Ausstrahlungsdatum setzen
				else
					touch -t $YY$Mo$DD$HH$Min "${destdir}${NewName}" 			# Dateidatum auf Ausstrahlungsdatum setzen	
				fi
				echo "	L==> umbenannt von"; echo "		$filename"; echo "	   zu"; echo "		$NewName"
				
				echo "------------------------->"; echo "	Datenbank schreiben:"
				# Hochkommas für SQL-String maskieren:
				NewNameMask=$( echo "$NewName" | sed "s/'/''/g" )
				titleMask=$(echo "$title" | sed "s/'/''/g")
				serietitleMask=$(echo "$serietitle" | sed "s/'/''/g")
				episodetitleMask=$(echo "$episodetitle" | sed "s/'/''/g")
				descriptionMask=$(echo "$description" | sed "s/'/''/g")
				
				sSQL="INSERT INTO raw ( file_original, file_rename, miss_series, format, titel, datum, zeit, dauer, sender, otrid, serie_titel, serie_season, serie_episode, serie_episodentitel, serie_episodebeschreibung, lastcheckday, checkcount, fps, realdauer, scantype, pix_height, pix_width, aspect_ratio, v_codec, a_codec) VALUES  ('$filename', '$NewNameMask', '$missSeries', '$format', '$titleMask', '$YYYY-$Mo-$DD', '$HH:$Min:00', '$duration', '$Channel', '$OTRID', '$serietitleMask', '$season', '$episode', '$episodetitleMask', '$descriptionMask', '$today', '0', '$fps', '$realduration', '$scantype', '$height', '$width', '$aspect_ratio', '$v_codec', '$a_codec')"
				
				if [ $LOGlevel = "2" ] ; then
					echo "	sSQL= $sSQL"
				fi
				sqlite3 ${workdir}/app/synOTR.sqlite "$sSQL"
				echo "	Datenbank schreiben"; echo "<-------------------------"
				
				if [ $lastjob -eq 4 ] ; then
					if [ $dsmtextnotify = "on" ] ; then
						sleep 5
						synodsmnotify @$MessageTo "synOTR" "[$title] ist fertig"
						sleep 5
					fi
					if [ $dsmbeepnotify = "on" ] ; then
						sleep 5
						echo 2 > /dev/ttyS1 #short beep
						sleep 5
					fi
					wget -q -O - "http://geimist.eu/synOTR/synOTR_FILECOUNT" >/dev/null 2>&1
				fi
			fi
		elif [ $OTRrenameactiv = "off" ] ; then
			echo -e ; echo -e ; echo "==> umbenennen ist deaktiviert"
		else
			echo "==> Variable für Renameaktivität falsch gesetzt ==> Wert >OTRrenameactiv< in Konfiguration.txt überprüfen!"
		fi
	done
}	


OTRopenrename ()
{
IFS=$'\n'; 				#	==>	den 'Internal Field Separator' so verändern, dass Felder nur noch durch Zeilenumbrüche (und nicht [zusätzlich] durch Leerzeichen) getrennt werden.
NewName=$NameSyntax		# 	Muster aus Konfiguration laden	
if [ $OTRserieninfo = "on" ] ; then
	echo -e ; echo -e; echo "==> OTRopenrename via SQLite [Umbenennungssyntax: $NameSyntax]:"; echo -e
	createDB
	echo "	undefinierte Serien suchen:"
	
	sSQL="SELECT rowid,file_rename,file_original,checkcount,format,titel,datum,zeit,dauer,sender,fps,realdauer,scantype,pix_height,pix_width,aspect_ratio,v_codec,a_codec  FROM raw WHERE miss_series=1 AND NOT lastcheckday=$today AND checkcount<15" 	
	
	sqlerg=`sqlite3 -separator $'\t' ${workdir}/app/synOTR.sqlite "$sSQL"`
	IFS=$'\012'	
	for entry in $sqlerg; do	
				
		IFS=$OLDIFS
	
		NewName=$NameSyntax		# Muster aus Konfiguration laden / vorherigen Schleifendurchlauf zurücksetzen	
		# Datensatzfelder separieren:
		id=`echo "$entry" | awk -F'\t' '{print $1}' `
		file_rename=`echo "$entry" | awk -F'\t' '{print $2}' `
		filename=`echo "$entry" | awk -F'\t' '{print $3}' `
		checkcount=`echo "$entry" | awk -F'\t' '{print $4}' `
		format=`echo "$entry" | awk -F'\t' '{print $5}' `
		title=`echo "$entry" | awk -F'\t' '{print $6}' `
		YYYY=`echo "$entry" | awk -F'\t' '{print $7}' | awk -F'-' '{print $1}'`
		YY=`echo "$entry" | awk -F'\t' '{print $7}' | awk -F'-' '{print $1}' | cut -c 3-4`
		Mo=`echo "$entry" | awk -F'\t' '{print $7}' | awk -F'-' '{print $2}'`
		DD=`echo "$entry" | awk -F'\t' '{print $7}' | awk -F'-' '{print $3}'`
		HH=`echo "$entry" | awk -F'\t' '{print $8}' | awk -F':' '{print $1}'`
		Min=`echo "$entry" | awk -F'\t' '{print $8}' | awk -F':' '{print $2}'`
		duration=`echo "$entry" | awk -F'\t' '{print $9}' `
		Channel=`echo "$entry" | awk -F'\t' '{print $10}' `
		fps=`echo "$entry" | awk -F'\t' '{print $11}' `
		realduration=`echo "$entry" | awk -F'\t' '{print $12}' `
		scantype=`echo "$entry" | awk -F'\t' '{print $13}' `
		height=`echo "$entry" | awk -F'\t' '{print $14}' `
		width=`echo "$entry" | awk -F'\t' '{print $15}' `
		aspect_ratio=`echo "$entry" | awk -F'\t' '{print $16}' `
		v_codec=`echo "$entry" | awk -F'\t' '{print $17}' `
		a_codec=`echo "$entry" | awk -F'\t' '{print $18}' `

		fileextension="${file_rename##*.}"
		
		if [ -f "$destdir$file_rename" ]; then
			if [ $LOGlevel = "1" ] ; then
				echo "	-> prüfe: "$filename
			elif [ $LOGlevel = "2" ] ; then
				echo "	-> SQL-Abfrage: "$sSQL
				echo "	-> prüfe Datei: "$filename
				echo "		$destdir$file_rename vorhanden"
				echo "	-> otr-serien Abfrage: http://www.otr-serien.de/myapi/reverseotrkeycheck.php?otrkey=$filename&who=synOTR" ; echo -e
			fi
			serieninfo=$(wget -q -O - "http://www.otr-serien.de/myapi/reverseotrkeycheck.php?otrkey=$filename&who=synOTR" )

			if [ $LOGlevel = "2" ] ; then
				echo "		Rückgabewert von otr-serien.de ==>	$serieninfo" ; echo -e
			fi
			if echo "$serieninfo" | grep -q "Keine Serien zuordnung vorhanden"; then
				echo " 					$serieninfo"
				sSQLupdate="UPDATE raw SET lastcheckday=$today, checkcount=$(($checkcount+1)) WHERE rowid=$id"
				if [ $LOGlevel = "2" ] ; then
					echo "	==> SQLupdate: $sSQLupdate"
				fi
				sqlite3 ${workdir}/app/synOTR.sqlite "$sSQLupdate"
			elif echo "$serieninfo" | grep -q "Kein OTR DB Eintrag vorhanden"; then
				echo " 					$serieninfo"
				sSQLupdate="UPDATE raw SET lastcheckday=$today, checkcount=$(($checkcount+1)) WHERE rowid=$id"
				if [ $LOGlevel = "2" ] ; then
					echo "	==> SQLupdate: $sSQLupdate"
				fi
				sqlite3 ${workdir}/app/synOTR.sqlite "$sSQLupdate"
			else
				#	Zeichenkorrektur:
				serieninfo=`echo $serieninfo | sed "s/<!DOCTYPE html>//g" | sed 's/\\\u00e4/ä/g' | sed 's/\\\u00f6/ö/g' | sed 's/\\\u00c4/Ä/g' | sed 's/\\\u00d6/Ö/g' | sed 's/\\\u00fC/ü/g' | sed 's/\\\u00dC/Ü/g' | sed 's/\\\u00dF/ß/g' | sed 's/\ & / und /g' | sed 's/\&/ und /g'`
				OTRID=`echo "$serieninfo" | awk -F, '{print $1}' | awk -F: '{print $2}' | sed "s/\"//g"`
				echo "OTRID: 				$OTRID"
				serietitle=`echo "$serieninfo" | jq -r '.Serie' | sed "s/://g" `		# jq ist ein Kommandozeilen-JSON-Parser
				echo "serietitle:			$serietitle"	
				season=`echo "$serieninfo" | awk -F, '{print $3}' | awk -F: '{print $2}' | sed "s/\"//g"`
				season="$(printf '%02d' "$season")"						# 2stellig mit führender Null
				echo "season:				$season"	
				episode=`echo "$serieninfo" | awk -F, '{print $4}' | awk -F: '{print $2}' | sed "s/\"//g"`
				episode="$(printf '%02d' "$episode")"					# 2stellig mit führender Null
				echo "episode:			$episode"	
				episodetitle=`echo "$serieninfo" | jq -r '.Folgenname' | sed "s/://g" `
				echo "episodetitle:		$episodetitle"	
				description=`echo "$serieninfo" | jq -r '.Folgenbeschreibung' | sed "s/:/ -/g" `
				echo "description:		$description"
				
				title="$serietitle - S${season}E${episode} $episodetitle"
				NewName=`echo $NewName | sed "s/§tit/${title}/g"`
			
				#	------------------ Neuer Name:
				NewName=`echo $NewName | sed "s/§dur/${duration}/g"`
				NewName=`echo $NewName | sed "s/§tit/${title}/g"`
				NewName=`echo $NewName | sed "s/§ylong/${YYYY}/g"`
				NewName=`echo $NewName | sed "s/§yshort/${YY}/g"`
				NewName=`echo $NewName | sed "s/§mon/${Mo}/g"`
				NewName=`echo $NewName | sed "s/§day/${DD}/g"`
				NewName=`echo $NewName | sed "s/§hou/${HH}/g"`
				NewName=`echo $NewName | sed "s/§min/${Min}/g"`
				NewName=`echo $NewName | sed "s/§cha/${Channel}/g"`
				NewName=`echo $NewName | sed "s/§qua/${format}/g"`
				NewName=`echo $NewName | sed "s/§fps/${fps}/g"`
				NewName=`echo $NewName | sed "s/§redur/${realduration}/g"`
				NewName=`echo $NewName | sed "s/§scty/${scantype}/g"`
				NewName=`echo $NewName | sed "s/§height/${height}/g"`
				NewName=`echo $NewName | sed "s/§width/${width}/g"`
				NewName=`echo $NewName | sed "s/§asra/${aspect_ratio}/g"`
				NewName=`echo $NewName | sed "s/§acod/${a_codec}/g"`
				NewName=`echo $NewName | sed "s/§vcod/${v_codec}/g"`
				
				NewName="$NewName.$fileextension"					
				echo -e; echo "	Neuer Dateiname ist: $NewName" ; echo -e
			
				echo "	==> umbenennen:"

				if [ -f "$destdir$NewName" ]; then		# Prüfen, ob Zielname bereits vorhanden ist
					echo "		Die Datei $NewName ist bereits vorhanden und $file_rename wird nicht umbenannt."
					sSQLupdate="UPDATE raw SET lastcheckday=$today, checkcount=$(($checkcount+1)), miss_series=0 WHERE rowid=$id"
					sqlite3 ${workdir}/app/synOTR.sqlite "$sSQLupdate"
					if [ $LOGlevel = "2" ] ; then
						echo "	sSQLupdate= $sSQLupdate"
					fi
				else	
					mv -i "$destdir$file_rename" "$destdir$NewName"
				
					#	Tags schreiben (MP4 only):
					echo "	Tags schreiben AtomicParsley (MP4 only):"
					if [ $fileextension = "mp4" ] ; then 
						#  --TVNetwork    (string)     Set the TV Network name
						#  --TVShowName   (string)     Set the TV Show name
						#  --TVEpisode    (string)     Set the TV episode/production code
						#  --TVSeasonNum  (number)     Set the TV Season number
						#  --TVEpisodeNum (number)     Set the TV Episode number
						#  --description 
						#  --artwork
						#  --genre 
						AtomicParsleyLOG=$(AtomicParsley "$destdir$NewName" --overWrite --TVNetwork "$Channel" --TVShowName "$serietitle" --TVEpisode "$episodetitle" --TVSeasonNum "$season" --TVEpisodeNum "$episode" --title "$title" 2>&1)	
						if [ $LOGlevel = "2" ] ; then
							echo "	AtomicParsleyLOG= $AtomicParsleyLOG"
						fi
						touch -t $YY$Mo$DD$HH$Min "$destdir$NewName" 			# Dateidatum auf Ausstrahlungsdatum setzen
					else
						touch -t $YY$Mo$DD$HH$Min "$destdir$NewName" 			# Dateidatum auf Ausstrahlungsdatum setzen	
					fi

					echo "umbenannt von $filename zu $NewName"
					echo "------------------------->"; echo "	Datenbank schreiben:"
					# Hochkommas für SQL-String maskieren (SQLite3 einfache Hochkommas maskieren durch hinzufügen eines weiteren):
					NewNameMask=$( echo "$NewName" | sed "s/'/''/g" )
					serietitleMask=$(echo "$serietitle" | sed "s/'/''/g")
					episodetitleMask=$(echo "$episodetitle" | sed "s/'/''/g")
					descriptionMask=$(echo "$description" | sed "s/'/''/g")
				
					sSQLupdate="UPDATE raw SET file_rename='$NewNameMask', otrid='$OTRID', serie_titel='$serietitleMask', serie_season='$season', serie_episode='$episode', serie_episodentitel='$episodetitleMask', serie_episodebeschreibung='$descriptionMask',  lastcheckday=$today, checkcount=$(($checkcount+1)), miss_series=0 WHERE rowid=$id"
					
					sqlite3 ${workdir}/app/synOTR.sqlite "$sSQLupdate"
					if [ $LOGlevel = "2" ] ; then
						echo "	sSQLupdate= $sSQLupdate"
					fi
					echo "	Datenbank schreiben"; echo "<-------------------------"
				
					if [ $lastjob -eq 4 ] ; then
						if [ $dsmtextnotify = "on" ] ; then
							sleep 5
							synodsmnotify @$MessageTo "synOTR" "[$title] ist fertig"
							sleep 5
						fi
						if [ $dsmbeepnotify = "on" ] ; then
							sleep 5
							echo 2 > /dev/ttyS1 #short beep
							sleep 5
						fi
						wget -q -O - "http://geimist.eu/synOTR/synOTR_FILECOUNT" >/dev/null 2>&1
					fi
				fi
			fi
		else
			echo "	-> nicht gefunden: $file_rename"
			echo "		L==> Datei liegt nicht mehr im Zielordner [$destdir]"
			sSQLupdate="UPDATE raw SET lastcheckday=$today, checkcount=$(($checkcount+1)), miss_series=0 WHERE rowid=$id"
			sqlite3 ${workdir}/app/synOTR.sqlite "$sSQLupdate"
			if [ $LOGlevel = "2" ] ; then
				echo "	sSQLupdate= $sSQLupdate"
			fi
		fi
	done
fi
}		


update ()
{
#Diese Funktion sucht nach einer neuen Version von synOTR
IFS=$'\012'
ONLINEVERSION=$(wget -q -O - http://geimist.eu/synOTR/VERSION2 | /usr/bin/tr -d "\r")
ONLINEVERSION=`echo "$ONLINEVERSION" | grep "$DevChannel" | awk -F" " '{print $1}'`

MAJOR_ONLINEVERSION=`echo $ONLINEVERSION | awk -F. '{print $1}'`
MINOR_ONLINEVERSION=`echo $ONLINEVERSION | awk -F. '{print $2}'`
MAJOR_CLIENTVERSION=`echo $CLIENTVERSION | awk -F. '{print $1}'`
MINOR_CLIENTVERSION=`echo $CLIENTVERSION | awk -F. '{print $2}'`

#	message="Es ist eine neue Version von synOTR verfügbar. <br>installierte Version: $CLIENTVERSION <br>neuste Version: $ONLINEVERSION <br><br>Die neue Version kann unter \"<a href=\"http://geimist.eu/synOTR/\">http://geimist.eu/synOTR</a>\" heruntergeladen werden. <a href=\"https://geimist.eu/synOTR/changelog/\">(ChangeLOG)</a><br>" # seit DSM 6.0 wird kein HTML mehr in den Benachrichtigungen gerendert
message="Es ist eine neue Version von synOTR verfügbar. 
Installierte Version: synOTR $MAJOR_CLIENTVERSION Update $MINOR_CLIENTVERSION
Neuste Version: synOTR $MAJOR_ONLINEVERSION Update $MINOR_ONLINEVERSION
Die neue Version kann unter \"http://geimist.eu/synOTR/\" heruntergeladen werden. (ChangeLOG: \"https://geimist.eu/synOTR/changelog/\")"

if [ ${MAJOR_ONLINEVERSION} -gt ${MAJOR_CLIENTVERSION}  ]; then
	echo -e "Es ist ein Update verfügbar!"
	echo -e "installierte Version: $CLIENTVERSION"
	echo -e "neuste Version: $ONLINEVERSION"
	echo "Die neue Version kann unter \"http://geimist.eu/synOTR/\" heruntergeladen werden."
	synodsmnotify @$MessageTo "synOTR" "$message"
elif [ ${MAJOR_ONLINEVERSION} -ge ${MAJOR_CLIENTVERSION}  ]; then
	if [ ${MINOR_ONLINEVERSION} -gt ${MINOR_CLIENTVERSION} ]; then
		echo -e "Es ist ein Update verfügbar!"
		echo -e "installierte Version: $CLIENTVERSION"
		echo -e "neuste Version: $ONLINEVERSION"
		echo "Die neue Version kann unter \"http://geimist.eu/synOTR/\" heruntergeladen werden."
		synodsmnotify @$MessageTo "synOTR" "$message"
	else
		echo -e "Update ==> Du nutzt bereits die neuste synOTR-Version [$CLIENTVERSION]"
	fi	
else
	echo -e "Update ==> Du nutzt bereits die neuste synOTR-Version [$CLIENTVERSION]"
fi
IFS=$OLDIFS
}


checkBins ()
{
IFS=$'\012'
if [ $LOGlevel = "2" ] ; then
	echo -e ; echo -e ; echo "==> Dateien im Installationsverzeichnis:"
	for i in $(find "$workdir" ) #-maxdepth 1 -type f) -o -path ./@eaDir -o -path ./app/@eaDir -o -path ./app/bin/@eaDir
		do	
			if echo "$i" | grep -q "@eaDir"; then
				continue
			else
				i2=`echo $i | cut -c ${#workdir}- | cut -c 2- `	
				echo "	$i2"
			fi
		done
fi
IFS=$OLDIFS
}


createDB ()
{
IFS=$'\012'
#Prüfen, ob SQLite-DB vorhanden ist und gegebenenfalls erstellen:
if [ ! -f "${workdir}/app/synOTR.sqlite" ]; then
	echo "Die Datenbank für nachträgliche Umbenennung ist nicht vorhanden und wird erstellt."
	# cp "${workdir}/app/synOTR.sqlite_template" "${workdir}/app/synOTR.sqlite"
	# ==>	DB nativ per SQL erzeugen:
	sqlinst="CREATE TABLE \"raw\" (\"timestamp\" timestamp NOT NULL  DEFAULT (CURRENT_TIMESTAMP) ,\"file_original\" varchar(500) ,\"file_rename\" varchar(500) ,\"miss_series\" tinyint(1) ,\"format\" varchar(5) ,\"titel\" varchar(500) ,\"datum\" date ,\"zeit\" time ,\"dauer\" int(5) ,\"sender\" varchar(100) ,\"otrid\" int(11) ,\"serie_titel\" varchar(500) ,\"serie_season\" int(11) ,\"serie_episode\" int(11) ,\"serie_episodentitel\" varchar(500) ,\"serie_episodebeschreibung\" varchar(10000) ,\"lastcheckday\" int(3) ,\"checkcount\" int(3) DEFAULT (null) ,\"fps\" Numeric(500) ,\"realdauer\" int(5) ,\"scantype\" varchar(2) ,\"pix_height\" int(5) ,\"pix_width\" int(5) ,\"aspect_ratio\" varchar(20) ,\"v_codec\" varchar(100) ,\"a_codec\" varchar(100) ); CREATE INDEX \"IDX_raw_check\" ON \"raw\" (\"lastcheckday\" ASC, \"checkcount\" ASC);"
	sqliteinfo=$(sqlite3 "${workdir}/app/synOTR.sqlite" "$sqlinst")
	echo $sqliteinfo
	if [ -f "${workdir}/app/synOTR.sqlite" ]; then
		echo " L==> DB erfolgreich erstellt [${workdir}/app/synOTR.sqlite]"; echo -e
	else
		echo " L==> fehlgeschlagen … !"; echo -e
	fi
fi
IFS=$OLDIFS
}
	

#		 _______________________________________________________________________________
#		|																				|
#		|                           AUFRUF DER FUNKTIONEN                        		|
#		|_______________________________________________________________________________|


	update
	checkBins
	OTRdecoder
	OTRcut
	OTRavi2mp4
	OTRrename
	OTRopenrename
	
exit
